[Swift] Amazon SNS で iOSアプリにPush通知を送信する #アドカレ2015
はじめに
こんにちは! haruhatahikoです。
AWSモバイルアドベントカレンダー7日目の記事になります。
Amazon SNS のモバイルプッシュ通知を使って、iOSアプリにPush通知を送信します。
1台を指定して送信する方法と、複数台にまとめて送信する方法の2種類紹介します。
iOSアプリ側の実装は Swift で行います!
Provisioning Profile を作成
- Certificate の作成
- App ID の作成
- デバイスの登録
- Provisioning Profile の作成
Certificate の作成
以下を参考に Certificate を作成してください。
よく分かる!iOS アプリ開発に必要な証明書ファイルの作成方法 2015年版
App ID の作成
Push Notification にチェックし、新しく App ID を作成します。
この段階ではConfigurable になっています。
Push Notifications用の Certificate を作成します。
アップロードすると Development が Enabled になりました!
デバイスの登録
Xcodeの Window > Organizer から UUID を参照し、テスト用のデバイスを登録します。
Provisioning Profile の作成
Provisioning Profile を作成します。
App ID、Certificate、デバイスを選択します。 下記画面に遷移後、Profileの名前を入力します。
ダウンロードして、インストールします。
証明書ファイルの書き出し
キーチェーンアクセス表示し先ほど登録した Remote Notification 用の Certificate を選択します。
右クリックを押して「"Apple Development iOS Push Services: アプリ名"を書き出す」を選び、P12 ファイルを書き出します。
こちらは Amazon SNS を設定する際に使用します。
Amazon Cognito の設定
1. CognitoIdentityPoolId を作成する
今回のサンプルではAWS SDKを利用して、
デバイストークンの登録や、トピックの受信登録を行う為、CognitoIdentityPoolId を作成します。
作成された CognitoIdentityPoolId は Edit identity pool から参照する事ができます。
作成された CognitoIdentityPoolId は後で設定に使用します。
2. ポリシーを編集する
Cognito 設定時に自動で作成された IAM を表示し、「ポリシーの編集」をクリックします。
Action と Resource に下記内容を追記し、「ポリシーの適用」をクリックします。
Amazon SNS の設定
1. Platform Application を作成する
「Create Platform Application」をクリックします。
項目名 | 値 |
---|---|
Application Name | 適当なアプリケーション名を入力 |
Push Notification Platform | Apple Development |
Push Certificate Type | iOS Push Certificate |
Choose P12 File | 先ほど作成した P12 ファイル |
Enter Password | P12 ファイル生成時に設定したパスワード |
上記内容を入力し「Load Credential File」をクリックすると、Certificate と Private Key が表示されます。
その後、「Create Platform Application」をクリックします。
作成された Platform Application の Arn は後で設定に使用します。
2. Topic を作成する
複数台にまとめて送信する為に Topic も作成します。 「Create new topic」をクリックします。
Topic name を入力し、「Create topic」をクリックします。
作成された Topic の Arn は後で設定に使用します。
AWS SDKを組み込む
1. ライブラリを追加する
Podfileに下記内容を追加し、 pod install
を実施します。
pod 'AWSSNS'
2. Bridging Header を追加する
下記内容を記述した ObjectiveC_Bridging_Header.h というファイルを作成します。
#import <AWSSNS/AWSSNS.h>
その後、「Objective-C Bridging Header」に新しく追加したファイルを指定します。
3. AWS SDK の初期設定
// Sets up the AWS Mobile SDK for iOS let credentialsProvider = AWSCognitoCredentialsProvider( regionType: AWSRegionType.APNortheast1, identityPoolId: "YourCognitoIdentityPoolId") let defaultServiceConfiguration = AWSServiceConfiguration( region: AWSRegionType.APNortheast1, credentialsProvider: credentialsProvider) AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = defaultServiceConfiguration
※ 先ほど作成した CognitoIdentityPoolId に差し替えてください。
4. デバイストークンの登録、トピックに受信登録
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { let deviceTokenString = "\(deviceToken)" .stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString:"<>")) .stringByReplacingOccurrencesOfString(" ", withString: "") print("deviceTokenString: \(deviceTokenString)") let sns = AWSSNS.defaultSNS() let request = AWSSNSCreatePlatformEndpointInput() request.token = deviceTokenString request.platformApplicationArn = "YourSNSPlatformApplicationArn" sns.createPlatformEndpoint(request).continueWithExecutor(AWSExecutor.mainThreadExecutor(), withBlock: { (task: AWSTask!) -> AnyObject! in if task.error != nil { print("Error: \(task.error)") } else { let createEndpointResponse = task.result as! AWSSNSCreateEndpointResponse print("endpointArn: \(createEndpointResponse.endpointArn)") let subscribeRequest = AWSSNSSubscribeInput() subscribeRequest.topicArn = "YourSNSTopicArn"; subscribeRequest.endpoint = createEndpointResponse.endpointArn; subscribeRequest.protocols = "Application"; sns.subscribe(subscribeRequest) } return nil }) }
※ 先ほど作成した SNSPlatformApplicationArn に差し替えてください。
※ 先ほど作成した SNSTopicArn に差し替えてください。
動作確認
1台だけに送信する
作成した Platform Application の「ARN」をクリックします。
送信したい Endpoint を選択し、「Publish to Endpoint」をクリックします。
メッセージを入力し、「Publish Message」をクリックします。
送信されました!!
複数台に送信する
送信したい Topic を選択し、「Publish to topic」をクリックします。
メッセージを入力し、「Publish Message」をクリックします。
送信されました!!
参考
https://dev.classmethod.jp/cloud/aws-amazon-sns-mobile-push-ios/
https://dev.classmethod.jp/cloud/aws/sns-publish-to-os-x/
http://qiita.com/g08m11/items/7c7df410596cb9a72fd0
まとめ
以上の手順で Amazon SNS を使って、iOSアプリにPush通知を送信する事が出来ました!
明日(12月8日)は、深澤 豪さんの Mobile Analytics for Web についての記事です。